NESTE CAPÍTULO
È chegada o hora de pular dentro e iniciar o trabalho com o VB .NET. Primeiramente, você precisa aprender um pouquinho sobre o novo IDE. O novo IDE do VB .NET pode parecer algo familiar a você, mas há algumas mudanças significativas que o fazem um ambiente mais útil. Contudo, estas mudanças pode ser frustrantes para desenvolvedores experientes, porque muitos dos atalhos de teclado mudaram, janelas têm nomes diferentes e as ferramentas de depuração funcionam de modo diferente. O VB .NET é parte do Visual Studio .NET ( ou VS .NET), que finalmente reúne todas as linguagens de desenvolvimento num só lugar: VB .NET, C++ .NET e C#. Você pode até mesmo criar uma única solução contendo múltiplos projetos escritos individualmente em diferentes linguagens.
A primeira vez que você inicia o Visual Studio .NET, você é levado a uma tela que permite que você configure o IDE. Esta tela é a página My Profile, discutida mais adiante neste capítulo. Após você visitar pela primeira vez a página My Profile, todas as inicializações subsequentes do Visual Studio .NET iniciarão com a página de início (start page), como mostra a Figura 2.1. A página de início contém um número de seções conforme indicado pelos links ao longo do lado esquerdo. Estas seções são:
Get Started — Esta opção permite que você abra um dos projetos recentes ou crie um novo projeto. Uns poucos projetos recentes são listados na área Get Started mostrada na Figura 2.1. À medida que você criar projetos no VB .NET, esta área irá exibir os quatro projetos mais recentemente abertos. Esta área também contém links para abrir projetos existentes e criar um novo projeto.
What's New — Esta opção cobre os recursos novos de linguagem no Visual Studio .NET, incluindo cada linguagem individualmente e o ambiente do Visual Studio .NET. Há links para tópicos nos arquivos de ajuda sobre os novos recursos para as linguagens do VS .NET, o .NET SDK e um link para conferir atualizações do VS .NET.
Online Community — Esta área fornece links para os grupos de discussão da Microsoft. Estes são grupos acessíveis com qualquer programa de leitura de newsgroups, mas eles são servidos pelo servidor de news da Microsoft (msnews.microsoft.com) e não servidores normais de news da Usenet.
Headlines — Fornece um local com links para novidades sobre o .NET. Esta página inclui um link para o MSDN Online, uma seção para artigos técnicos, uma seção para o Knowledge Base e vários outros recursos.
Search Online— Pesquisa a biblioteca online do MSDN
Downloads— Lhe dá acesso a vários downloads. Downloads que podem incluir novas ferramentas, tais como service packs e exemplos de código. Os downloads também podem incluir novas documentações.
Web Hosting— Permite que você se conecte diretamente a serviços que oferecem hospedagem para os seus .NET Web Services ou Aplicações .NET Web. Com um comando, você pode publicar suas aplicações .NET ou serviços para estas companhias de hospedagem. Ao menos uma, a Brinkster, oferece hospedagem grátis e com isto você pode testar sua aplicação.
My Profile— Esta tela permite-lhe escolher o layout geral do Visual Studio .NET. Você pode configurar os atalhos de teclado para o mesmo esquema de versões prévias do Visual Studio, tais como a versão 6. Você pode também configurar o layout de janela para parecer com as versões anteriores de projetos do Visual Studio e você pode filtrar o help automaticamente usando o seu perfil. Ao longo deste curso, eu assumirei que o perfil é aquele estabelecido pelo Visual Studio e que todas as demais configurações são deixadas nos seus valores padrões.

Nota
A página inicial é em HTML e provavelmente irá mudar quando o VS .NET for lançado.

Você tem um projeto aberto com um formulário nele. Até aqui, você nada fez com ele, mas agora você irá criar a obrigatória aplicação Olá Mundo. Eu me recordo de quando a Microsoft estava correndo o mundo e mostrando como poderia ser fácil criar uma aplicação do tipo Olá Mundo em VB simplesmente teclando uma linha de código. Bem, ainda continua igualmente fácil, mas as coisas certamente se apresentam diferentes agora.
Certifique-se de que o designer de formulários é a tab ativa na área de trabalho e abra a Toolbox. Clique e arraste um botão sobre o formulário. Posicione-o onde você quiser. Até aqui é tudo como no VB6. Agora, dê um duplo clique no botão.
Um duplo clique sobre o botão causa a abertura da janela de código, exatamente como no VB6. Contudo, no VB .NET, o código é adicionado na forma de uma tab na área de trabalho. A nova tab é intitulada Form1.vb, e tem um asterisco em seguida indicando que ela não foi salva. Você tem bastante código nesta janela, e é código que você nunca viu antes. Parte do código é ocultada dos seus olhos, isto devido ao fato de que, no Visual Studio .NET, o editor de código permite que você oculte ou expanda blocos de código. Se você expandir o código gerado na seção Windows Form Designer, verá um bocado de código. Na verdade, antes que você digite qualquer código, já terá o código mostrado na Figura 2.10. Note que eu ativei a numeração de linhas apenas para referenciar as linhas com mais facilidade. Se você também quiser ativar a numeração de linhas, vá ao menu Tools, Options. Expanda o nó Text Editor e escolha Basic. Cheque a checkbox Line Numbers.

A primeira linha de código mostra que este formulário, Form1, é na verdade apenas uma classe. Esta é uma das maiores mudanças do VB .NET. Formulários são verdadeiras classes. Por quê? Por que formulários são realmente apenas classes e têm sido assim sempre. Você pode nunca ter pensado neles desta forma antes, mas um formulário é apenas mais uma classe. Quando um formulário é exibido, você apenas instanciou uma classe.
A linha seguinte é uma declaração Inherits. Qualquer formulário do Windows que você cria apenas herda da classe base Form. Você está chamando uma classe em um dos namespaces .NET System, neste caso, você está chamando a classe Form no namespace System.Windows.Forms. É esta classe que lhe dá a funcionalidade básica dos formulários, tais como os métodos e eventos que você acessará em seu código. A declaração Inherits é a sua primeira indicação de herança real no VB .NET. Você pode herdar desta classe base e então estendê-la se assim o quiser.
O código localizado dentro da região Windows Form Designer é mostrado na Listagem 2.1.
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
Friend WithEvents Button1 As System.Windows.Forms.Button
'Required by the Windows Form Designer
Private components As System.ComponentModel.Container
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(64, 56)
Me.Button1.Name = "Button1"
Me.Button1.TabIndex = 0
Me.Button1.Text = "Button1"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Controls.AddRange(New System.Windows.Forms.Control() { Me.Button1} )
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
#End Region
A próxima parte dentro da classe é um Sub público chamado New, localizado dentro da região de código gerado automaticamente. Note que ele chama um Sub nomeado InitializeComponent. A rotina InitializeComponent é criada para você pelo VS .NET. A nova rotina é similar ao procedimento de evento Form_Load que você está acostumado a ver no VB6. Note que você pode adicionar algum código seu após a chamada a InitializeComponent .
Após o sub New, há o sub Dispose, parecido com o evento Form_Unload do VB6. Este é o lugar de limpeza de tudo que você pode ter feito. Não se preocupe sobre as palavras Overloads e Overrides por enquanto, elas serão explicadas quando você aprender mais sobre herança.
Como você pode ver, a rotina InitializeComponent está neste bloco e é ela que configura os controles no formulário. Note que o botão tem propriedades atribuídas, tais como localização e tamanho, e então é adicionado a uma coleção de controles.
Finalmente, abaixo desta região de código, está a rotina para tratar o evento click do botão. Isto também se mostra diferente do que você tem visto anteriormente. Na verdade, se você inicia um novo projeto no VB6, adiciona um botão ao formulário e dá um duplo clique sobre o botão, seu projeto inteiro mostra apenas este código:
Private Sub Command1_Click() End SubContudo, no VB .NET, você verá um bocado mais de código. Na verdade, o evento Click não é tratado antes da linha 57, ao menos neste exemplo. A declaração do procedimento de evento também é completamente diferente. No VB .NET, o procedimento de evento parece-se com isto:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub
Novamente, não se preocupe com todas as mudanças por enquanto. Agora, digite a seguinte linha de código:
MsgBox "Olá, Mundo!"
Quando você sair desta linha, você verá que o VB .NET automaticamente adiciona parênteses em torno do argumento, deixando você com isto:
MsgBox("Olá, Mundo!")Esta é uma das primeiras mudanças fundamentais da linguagem.. Subs e funções requerem parênteses entorno dos argumentos. O comando MsgBox é uma função, mas no VB6, você não precisava adicionar parênteses entorno de um parâmetro se você estivesse ignorando o valor de retorno. No VB .NET, você precisa sempre de parênteses, assim sendo acostume-se a adicioná-los ou ao menos acostume-se a ver o VB .NET adicioná-los para você.
Agora é hora de rodar esta demonstração não muito excitante e ver como ela funciona. Você pode clicar no botão Start na barra de ferramentas (isto deve lhe ser familiar) ou você pode ir ao menu Debug e escolher Start.
O Form1 será carregado. Clique no botão e você deverá receber a caixa de mensagem com o texto "Olá, Mundo!". Na Figura 2.11, você notará que o título da caixa de mensagem é igual ao nome do projeto, do mesmo modo que era no VB6. Feche a aplicação e retorne ao IDE.

Note que uma nova janela está aparecendo na base da tela, uma janela de Output está aberta agora. A Figura 2.12, mostra esta janela. A janela de Output tem uma listbox estilo drop-down que pode exibir diferentes informações. Atualmente, ela lhe mostra todas as mensagens de depuração. Você não adicionou nenhum debug.print no seu código, mas certas ações do compilador introduzem automaticamente comentários na janela de Debug.

Antes de avançar mais, você pode querer mudar o título da caixa de mensagem. Retorne à única linha de código que você escreveu até aqui e modifique-a para parecer-se com isto:
MsgBox("Olá, Mundo", , "Minha primeira aplicação VB .NET")
Agora que você adicionou um título à caixa de mensagem, rode o projeto novamente e o título da sua caixa de mensagem será "Minha primeira aplicação VB .NET". Se você pensa que ela não pode melhorar além disto, segure firme.
O Visual Studio .NET acrescentou uma variedade de recursos ao VB .NET para tornar o IDE mais poderoso e melhorar a funcionalidade de formulários Windows. Há melhorias no suporte a criação de menus, controles que automaticamente redimensionam baseados no texto a ser exibido. melhor posicionamento de controles para janelas redimensionadas e um melhorado mecanismo de atribuição da ordem de tabulação.
Quantas vezes você criou formulários e configurou a propriedade BorderStyle para fixa de modo a impedir que os usuários o redimensionassem? Se você posicionou uma série de botões na base do formulário, você não quer que as pessoas o redimensionem e, subitamente, a linha de base dos botões fique no meio do formulário.
O VB .NET permite que você ancore os controles em um ou mais lados do formulário. Isto permite que um controle se mova conforme o formulário seja redimensionado de forma a ficar no lugar apropriado.
Voltando ao Form1, remova o código inserido no procedimento de evento Button1_Click. Faça o formulário ficar um pouco maior e mova o botão em direção ao canto inferior direito. Agora, adicione um TextBox ao formulário. Mude a propriedade Multiline do TextBox para True e redimensione o TextBox de modo a preencher a maior parte do formulário, exceto a porção que agora contém o botão. Seu formulário deve, agora, assemelhar-se ao que mostra a Figura 2.15.

Rode o projeto. Após a janela ser carregada, redimensione a movendo o canto inferior direito para baixo e para a direita. Você terá algo que se parece com o que mostra a Figura 2.16.

Naturalmente, isto parece um bocado estranho e é exatamente o que você está acostumado a ver que acontece no VB6. Sua solução em VB6, a menos que você use um componente extra, é escrever um bocado de código que é executado quando o evento Resize do formulário é disparado. Você usa este código para mover o botão e redimensionar o TextBox. O VB .NET tem uma forma melhor de lidar com isto, portanto, pare a aplicação e retorne ao IDE.
Certifique-se de que você está na tab Form1.vb[Design] e clique no Button1. Na janela de propriedades, role para baixo até encontrar a propriedade Anchor. Quando você abrir a list, você verá uma estranha caixa que mostra algo cinza no meio e quatro retângulos ao seu redor. Por default, os retângulos da esquerda e do topo são escurecidos, enquanto os retângulos da direita e da base estão vazios. Os retângulos escurecidos indicam que, neste momento, o botão está ancorado no topo e à esquerda do formulário. Quando você redimensiona o formulário, o botão permanecerá à mesma distância do topo e da esquerda do formulário. Isto não é o que você quer, portanto, clique nos retângulos da esquerda e do topo para limpá-los, e clique nos retângulos da direita e da base para escurecê-los. Quando você terminar, a propriedade Anchor deverá mostrar-se como na Figura 2.17. Após você fechar a lista, a propriedade Anchor deverá mostrar Botton, Right.

Em seguida, clique no TextBox e escolha a propriedade Anchor. Clique nos retângulos da base e da direita, mas deixe os retângulos da esquerda e do topo como já estão. Agora, o TextBox está preso a todas as bordas, e permanecerá à mesma distância delas. A propriedade Anchor para o TextBox deverá mostrar agora Top, Bottom, Left, Right.
Rode o projeto novamente. Após o formulário se abrir, redimensione-o. Note que o botão agora permanece no canto direito inferior, e o TextBox automaticamente se redimensionou com o formulário. Você pode ver este comportamento na figura 2.18. O redimensionamento e o movimento foram obtidos sem escrever uma linha de código.

Se você odiava a criação de menus em versões anteriores do VB, você não está sozinho.O editor de menus do VB nunca ganhou nenhum prêmio de facilidade de uso nem por ser amigável ao usuário. O novo editor de menus do VB .NET pode até tornar divertida a criação de menus.
Usando o mesmo formulário do exemplo anterior, vá à caixa de ferramentas e dê um duplo clique no controle MainMenu. O controle MainMenu é adicionado à área abaixo do formulário, chamada de Componente Tray, que você verá em maiores detalhes mais adiante. Se você der um clique simples no controle MainMenu na Component Tray, você verá uma barra de menus adicionada ao formulário, que simplesmente desloca para baixo o TextBox. O menu mostra um item que diz Type Here, conforme mostrado na Figura 2.19.

Dê um clique na caixa que diz Type Here (Digite aqui) e digite &File. Isto irá criar uma nova caixa Type Here á direita e uma nova caixa Type Here abaixo. Clique na Type Here abaixo da palavra &File e digite &Open. Do mesmo modo que em versões anteriores do VB, o "&" é usado para significar uma seleção Alt+Tecla. Digitando &Open cria uma nova caixa Type Here à direita e uma nova abaixo. Como você pode ver, você está criando graficamente um menu.
Clique na caixa abaixo de Open e digite &Close.
Você pode clicar na caixa Type Here abaixo do menu File e escolher adicionar mais um menu de nível máximo. Por exemplo, você poderia adicionar &Edit à direita do menu File. Agora, o menu Edit ganha entradas em branco e você pode adicionar itens copiando e colando.
Clique no menu Open que você acaba de criar. Se você olhar na janela de propriedades, você verá que o nome real do objeto é MenuItem2. Você pode mudar isto se quiser, mas não se preocupe com isto por enquanto. Clique na lista para a propriedade Shortcut. Role a lista até encontrar a opção Ctrl+O. A propriedade ShowShortcut é configurada para True por default, mas você não verá o atalho em tempo de design. Rode a aplicação. A Figura 2.20 mostra lhe o que você deveria ver. Note que o sublinhado das letras (gerado pelo &) não aparece a menos que você pressione a tecla Alt.

Se você detestava criar menus em versões prévias do VB, é bem provável que você também odiava a configuração da ordem de tabulação, especialmente em formulários complexos. Você tinha que clicar em cada controle, um de cada vez, e certificar-se de que a propriedade TabIndex estivesse correta. Agora, usando o formulário com que você tem trabalhado, remova o textbox. Deixe o Button1 no canto direito do formulário.
Adicione três novos botões ao formulário. Posicione-os de tal forma que o Button1 seja o último na série. Pode até misturá-los, se preferir. Se você der uma olhada na Figura 2.21, você verá que os botões foram posicionados de tal forma que você iria querer que a ordem de tabulação fosse Button2, Button4, Button3 e Button1. Se você rodar o projeto desta forma, contudo, a ordem ainda será Button1, Button2, Button3 e Button4.

Para configurar a ordem de tabulação, clique no menu View e escolha Tab Order. Você terá, agora, pequenos números em cada controle que podem receber o foco como mostrado na Figura 2.22. Para modificar a ordem de tabulação, simplesmente clique nos controles na ordem que você quer que eles recebam o foco. Neste exemplo, você apenas clica no Button2, Button4, Button3 e Button1, nesta ordem, e a ordem de tabulação é criada para você conforme evidenciado pelo número no canto alto esquerdo de cada botão.

Você pode escolher View, Tab Order novamente e desativar a exibição da ordem de tabulação. Rode o projeto e verifique a nova ordem de tabulação.
Se você examinar a caixa de ferramentas, poderá estranhar a ausência dos controles Line e Shape. Eles se foram. Estes controles se foram, mas você tem uma alternativa.
A Microsoft os removeu porque eles eram controles sem janela correspondente, isto é, eles não tinham uma propriedade hWnd, mas eram desenhados diretamente sobre o formulário. Nos novos formulários do VB .NET, todos os controles precisam ser janelas e você não pode mais ter controles transparentes.
Agora que você recebeu a explicação técnica, o que você pode fazer sobre isto? A forma fácil de forjar uma linha é usar um label. Ative a borda e então atribua a altura (ou largura) para 1. Isto faz com que o label se pareça com uma linha e funciona bem. Para formas mais complexas, a Microsoft recomenda que você use os objetos GDI+, que são muito poderosos. Os objetos GDI+ estão no namespace System.Drawing, e serão examinados brevemente no capítulo 3, "Principais Mudanças do VB .NET".
Os formulários, agora, têm a propriedade Opacity. É um recurso necessário? Provavelmente não, mas pode ser usado para alguns propósitos bastante úteis. Por exemplo, você pode usá-la para fazer os formulários desaparecerem e reaparecerem, e torná-los translucentes enquanto estão sendo arrastados.
No formulário Form, que você tem trabalhado até aqui, localize sua propriedade Opacity e modifique-a para 50%. Agora, rode o projeto e você notará que o formulário está quase todo transparente. O formulário ainda funciona normalmente. Você pode clicar e arrastar o formulário, pressionar os botões. Ele funciona bem, mas está translúcido no momento. Feche o projeto e você poderá adicionar algum código para tirar vantagem deste nova propriedade.
Vá à caixa de ferramentas e adicione um timer ao seu formulário. Diferentemente do VB6, o timer não aparece de fato no formulário, mas na Component Tray para o formulário. Clique no timer nesta janela e atribua True à propriedade Enabled do timer. O intervalo de 100 está bom. Agora, clique na tab Form1.vb para acessar o código. Na rotina Sub New, adicione a seguinte linha após o comentário "Add any initialization ..." :
Me.Opacity = 0
Isto tão somente atribui a opacidade 0, o que significa que o formulário estará completamente invisível quando carregado.
Em seguida, use as combos Class Name e Method Name no topo da janela de código e escolha o evento Elapsed do controle Timer1. Isto faz com que seja adicionado um procedimento de evento para tratar o evento Timer1_Elapsed. Dentro deste procedimento de evento, entre com o seguinte código:
Me.Opacity = Me.Opacity + 0.01 If Me.Opacity >= 1 Then Timer1.Enabled = False Beep() End If
Este código simplesmente incrementa a opacidade em .01 a cada vez que o evento Elapsed ocorre. Quando finalmente ele atinge 1 (100%), o timer se desliga atribuindo False à sua propriedade Enabled e o bip é chamado para soar um alarme tal que você saiba que ele terminou.
Se você está todo confuso com o código, a listagem 2.2 mostra como a listagem completa ficará (com o código gerado para Windows Form Designer oculto).
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles button1.Click End Sub
Private Sub Timer1_Elapsed(ByVal Sender As Object, _
ByVal e As System.Timers.ElapsedEventArgs)Handles Timer1.Elapsed
Me.Opacity = Me.Opacity + 0.01
If Me.Opacity >= 1 Then
timer1().Enabled = False
Beep()
End If
End Sub
End Class
Rode o projeto. Você deverá ver o seu formulário surgir aos poucos à medida que a opacidade lentamente é aumentada. Você ouvirá um bip quando a formulário estiver plenamente opaco.
Este capítulo procurou introduzi-lo rapidamente no IDE do VB .NET. Você criou seu primeiro programa em VB .NET e viu alguns dos novos recursos apresentados no IDE. Agora é mais fácil fazer os controles manterem suas posições mesmo quando os formulários são redimensionados. A ajuda é mais rapidamente acessível. O Server Explorer torna mais fácil localizar e usar recursos disponíveis na corporação. Novos tipos de projetos abrem um novo mundo para os desenvolvedores VB .NET.
Em adição a estas mudanças, há também algumas mudanças fundamentais na linguagem. Algumas das quais foram mencionadas neste capítulo e, se você olhou o código, deve ter visto ainda outras. O próximo capítulo é dedicado a apresentar algumas das mais importantes mudanças na linguagem.